-----------------------------------------------
--  怪物血量
-- @param  monster  怪物

return function(monster)
    -- 1. 首先，如果有“辅助“属性，就先从”影子“属性中获取
    local hp = monster:getRealHp();
    if hp then
        -- 精英怪降低
        hp = FormulaM.invoke("CALC_ELITE_REDUCE_ATTRIB", monster, "hp", hp);

        return hp;
    end

    local combine = PropM.combine;
    local apply = PropM.apply;
    local fetchProps = PropM.fetchProps;
    local trigger = PropM.trigger;

    -- 怪物血量只有绝对值增、绝对值减两种属性加成
    hp = monster.dbase:query("hp", 0);

    -- 1. 绝对值增
    local prop = combine(monster, "attrib2", "hp");
    hp = apply(prop, hp);

    -- 2. 绝对值减少
    prop = combine(monster, "reduce_attrib2", "hp");
    hp = apply(prop, hp);

    -- 3. 加成部分
    local addon_hp = monster.dbase:query("addon_hp", 0);
    hp = hp + addon_hp;

    -- 4. 精英怪生命百分比降低
    hp = FormulaM.invoke("CALC_ELITE_REDUCE_ATTRIB", monster, "hp", hp);

    return hp;
end
